package com.itbaizhan.springbootmybatisplus.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/*我们将表名改为tb_student，id字段名改为sid，
name字段名改为sname，此时由于名字不同无法完成映射，
我们可以通过相关注解为实体类对象指定表名和列名*/
@Data
@NoArgsConstructor
@AllArgsConstructor
/*@TableName
作用：指定类为哪个表的实体类
位置：类上方*/
//@TableName("tb_student")    //在配置文件中配置了全局配置，所以可以注释
public class Student {
   // @TableId(value="sid",type = IdType.AUTO)
    @TableId(value = "sid")  //在配置文件中配置了全局配置,可以省写type
    private Integer id;
    //@TableField
    //作用：在属性和列名不同的情况下，指定映射关系
    //位置：非主键属性上方
    @TableField("sname")
    private String name;
    private String email;
    private String gender;
    private Integer age;
}

/*
* @TableId
作用：指定实体类的属性为主键

位置：属性上方

属性：

value：主键字段名

type：主键策略

值	        描述
NONE	    无状态,不设置主键类型
AUTO	    自增主键
INPUT	    插入前自行设置主键值
ASSIGN_ID	默认策略，使用雪花算法自动生成主键ID，
*           主键类型为整形或字符串。
*           （雪花算法：微博开源的分布式ID生成算法，使用一个64位的Long类型数字作为全局唯一ID。
*               在分布式系统中的应用十分广泛，且ID引入了时间戳，基本上保持自增）
ASSIGN_UUID	自动生成排除中划线的UUID作为主键，主键类型为字符串。*/

/*
* 在SpringBoot项目中使用MyBatisPlus
*
1 创建SpringBoot项目，添加MyBatisPlus起步依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>
<!-- MyBatisPlus -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.26</version>
</dependency>
<!-- lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>

*
* 2,在SpringBoot配置文件中配置数据源

# 数据源
spring:
  datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql:///school?serverTimezone=UTC
   username: root
   password: root


*
*3 编写实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
  private Integer id;
  private String name;
  private String email;
  private String gender;
  private Integer age;
}
*
*
4,编写Mapper接口，继承BaseMapper<>  <>里写实体类

public interface StudentMapper extends BaseMapper<Student> {
}

*
* 5，在 SpringBoot启动类中添加 @MapperScan 注解，扫描Mapper文件夹

@SpringBootApplication
@MapperScan("com.itbaizhan.mpdemo2.mapper")
public class SpringbootMpApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMpApplication.class, args);
   }
}
*
*
6,测试Mapper方法

@SpringBootTest
public class StudentMapperTest {
  @Autowired
  private StudentMapper studentMapper;

  @Test
  public void testFindById(){
    Student student = studentMapper.selectById(1);
    System.out.println(student);
   }*/